package com.mldong.modules.sys.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.mldong.base.CommonPage;
import com.mldong.modules.sys.dto.LoginParam;
import com.mldong.modules.sys.dto.UserPageParam;
import com.mldong.modules.sys.dto.UserParam;
import com.mldong.modules.sys.entity.User;
import com.mldong.modules.sys.vo.LoginVO;
import com.mldong.modules.sys.vo.UserVO;

import java.util.List;

public interface UserService extends IService<User> {
    /**
     * 添加用户
     * @param param
     * @return
     */
    public boolean save(UserParam param);

    /**
     * 更新用户
     * @param param
     * @return
     */
    public boolean update(UserParam param);

    /**
     * 自定义分页
     * @param param
     * @return
     */
    CommonPage<UserVO> page(UserPageParam param);

    /**
     * 通过id查询
     * @param id
     * @return
     */
    UserVO findById(Long id);

    /**
     * 登录
     * @param param
     * @return
     */
    LoginVO login(LoginParam param);

    /**
     * 退出
     * @param token
     */
    void logout(String token);

    /**
     * 个人-修改头像
     * @param param
     */
    void updateAvatar(UserParam param);

    /**
     * 个人-修改用户信息
     * @param param
     */
    void updateInfo(UserParam param);

    /**
     * 重置密码
     * @param userIds
     */
    void resetPassword(List<Long> userIds);

    /**
     * 修改用户密码
     * @param userId 用户ID
     * @param password 旧密码
     * @param newPassword 新密码
     */
    void updatePwd(Long userId,String password,String newPassword);

    /**
     * 给指定用户授权角色
     * @param userId 用户ID
     * @param roleIdList 角色ID
     */
    void grantRole(Long userId,List<Long> roleIdList);

    /**
     * 锁定用户
     * @param userIds
     */
    void locked(List<Long> userIds);
    /**
     * 取消锁定用户
     * @param userIds
     */
    void unLocked(List<Long> userIds);

    /**
     * 扮演用户
     * @param userId
     * @return
     */
    LoginVO playUser(Long userId);
    /**
     * 取消扮演用户
     * @param token
     * @return
     */
    LoginVO unPlayUser(String token);
}
